Android
lifecycle
ViewModel
規則,viewModel 永遠不應知道 view, ui lifecycle
生命週期長且簡單,當對應的 activity 被銷毀時,框架會自動觸發 onClear
給個情境,用戶輸入了一個字串做搜尋,拿到一個 list,如果都不做處理,當 os 砍掉應用的時候,用戶回來會看到初始畫面
而我們可以透過 room 和 saveStateHandler 去保存狀態,在 viewModel 保存字串,並視情況在 process 結束,用戶再次回到應用時,將字串在 viewModel 重新讀出,並向 Model 發出,以獲得 room 或是 api 資料
:::info
contains(String key) - 检查是否存在给定键的值。
remove(String key) - 移除给定键的值。
keys() - 返回 SavedStateHandle 中包含的所有键。
:::
class SavedStateViewModel(private val savedStateHandle: SavedStateHandle) : ViewModel() {
val filteredData: LiveData<List<String>> =
savedStateHandle.getLiveData<String>("query").switchMap { query ->
repository.getFilteredData(query)
}
fun setQuery(query: String) {
savedStateHandle["query"] = query
}
//or
val filteredData: StateFlow<List<String>> =
savedStateHandle.getStateFlow<String>("query")
.flatMapLatest { query ->
repository.getFilteredData(query)
}
fun setQuery(query: String) {
savedStateHandle["query"] = query
}
}